home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / COMPRES.ASM < prev    next >
Assembly Source File  |  1991-08-15  |  5KB  |  224 lines

  1. code    segment
  2.         assume  cs:code, ds:code, es:code
  3.         org     100h
  4. prog:
  5.         jmp     main
  6.  
  7. tbl     dw      256 dup (0)
  8. asc     db      256 dup (0)
  9. cod     db      256 dup (0)
  10. len     db      256 dup (0)
  11. dat     db      0,10,16,9,64,8,64,8,0,7
  12. fn1     db      'afd.com',0
  13. fn2     db      'sup.com',0
  14. fn3     db      'e1.com',0
  15.  
  16. main:
  17.  
  18.         call    read
  19.         call    build
  20.         call    uha
  21.         call    good
  22.         call    write
  23.  
  24.         mov     al,00h
  25.         mov     ah,4ch
  26.         int     21h
  27.  
  28. good    proc    near
  29.         mov     ax,cs
  30.         mov     ds,ax
  31.         mov     si,offset asc
  32.         mov     di,152
  33.         mov     cx,256
  34.         rep     movsb
  35.  
  36.         mov     dx,offset fn3
  37.         mov     al,00h
  38.         mov     ah,3dh
  39.         int     21h
  40.         jc      ssr
  41.         mov     bx,ax
  42.         mov     ax,es
  43.         mov     ds,ax
  44.         sub     dx,dx
  45.         mov     cx,152
  46.         mov     ah,3fh
  47.         int     21h
  48.         jc      ssr
  49.         mov     ah,3eh
  50.         int     21h
  51.         mov     ax,cs
  52.         mov     ds,ax
  53. ssr:    ret
  54. good    endp
  55.  
  56. uha     proc    near
  57.         mov     ax,cs
  58.         add     ax,1000h
  59.         mov     ds,ax
  60.         add     ax,1000h
  61.         mov     es,ax
  62.         mov     bx,4fffh
  63.         mov     di,bx
  64.         mov     ch,0
  65.         sub     bp,bp
  66. lu10:   sub     ax,ax
  67.         mov     al,[bx]
  68.         mov     si,ax
  69.         mov     al,cs:cod[si]
  70.         mov     dl,cs:len[si]
  71.         mov     cl,dl
  72.         cmp     dl,7
  73.         jne     lu20
  74.         inc     ah
  75. lu20:   sub     cl,ch
  76.         shl     ax,cl
  77.         or      bp,ax
  78.         add     ch,16
  79.         sub     ch,dl
  80.         mov     cl,8
  81. lu30:   cmp     ch,cl
  82.         jc      lu40
  83.         mov     ax,bp
  84.         shl     bp,cl
  85.         mov     es:[di],ah
  86.         dec     di
  87.         sub     ch,cl
  88.         jmp     short lu30
  89. lu40:   dec     bx
  90.         cmp     bx,0ffffh
  91.         jne     lu10
  92.         mov     ax,bp
  93.         mov     es:[di],ah
  94.         ret
  95. uha     endp
  96.  
  97. fill    proc    near
  98.         sub     si,si
  99.         mov     cx,0100h
  100. lf10:   mov     ax,si
  101.         mov     cs:asc[si],al
  102.         inc     si
  103.         loop    lf10
  104.         sub     bx,bx
  105.         mov     cx,5000h
  106. lf20:   mov     al,[bx]
  107.         mov     si,ax
  108.         shl     si,1
  109.         inc     cs:tbl[si]
  110.         inc     bx
  111.         loop    lf20
  112.         ret
  113. fill    endp
  114.  
  115. pause   proc    near
  116.         push    ax
  117.         mov     ah,01h
  118.         int     21h
  119.         pop     ax
  120.         ret
  121. pause   endp
  122.  
  123. sort    proc    near
  124.         mov     cx,00ffh
  125. l10:    mov     di,cx
  126.         mov     bx,cx
  127.         shl     bx,1
  128.         add     bx,offset tbl
  129.         sub     ax,ax
  130. l20:    mov     si,ax
  131.         shl     si,1
  132.         mov     dx,tbl[si]
  133.         cmp     dx,[bx]
  134.         jnc     l30
  135.         xchg    dx,[bx]
  136.         xchg    dx,tbl[si]
  137.         shr     si,1
  138.         mov     dl,asc[si]
  139.         xchg    dl,asc[di]
  140.         xchg    dl,asc[si]
  141. l30:    inc     ax
  142.         cmp     ax,cx
  143.         jc      l20
  144.         loop    l10
  145.         ret
  146. sort    endp
  147.  
  148. make    proc    near
  149.         mov     cx,16
  150.         mov     bx,offset dat
  151.         sub     si,si
  152.         sub     ax,ax
  153. lm10:   mov     al,asc[si]
  154.         mov     di,ax
  155.         mov     dx,si
  156.         add     dl,[bx]
  157.         mov     cod[di],dl
  158.         mov     dl,[bx+1]
  159.         mov     len[di],dl
  160.         inc     si
  161.         cmp     si,cx
  162.         jnz     lm10
  163.         inc     bx
  164.         inc     bx
  165.         shl     cx,1
  166.         cmp     cx,512
  167.         jnz     lm10
  168.         ret
  169. make    endp
  170.  
  171. build   proc    near
  172.         call    fill
  173.         mov     ax,cs
  174.         mov     ds,ax
  175.         call    sort
  176.         call    make
  177.         ret
  178. build   endp
  179.  
  180. write   proc    near
  181.         mov     dx,offset fn2
  182.         mov     al,02h
  183.         mov     ah,3dh
  184.         int     21h
  185.         jc      sw
  186.         mov     bx,ax
  187.         mov     ax,es
  188.         mov     ds,ax
  189.         sub     dx,dx
  190.         mov     cx,5000h
  191.         mov     ah,40h
  192.         int     21h
  193.         jc      sw
  194.         mov     ah,3eh
  195.         int     21h
  196. sw:     ret
  197. write   endp
  198.  
  199. read    proc    near
  200.         mov     dx,offset fn1
  201.         mov     al,00h
  202.         mov     ah,3dh
  203.         int     21h
  204.         jc      sr
  205.         mov     bx,ax
  206.         mov     ax,ds
  207.         add     ax,1000h
  208.         mov     ds,ax
  209.         sub     dx,dx
  210.         mov     cx,5000h
  211.         mov     ah,3fh
  212.         int     21h
  213.         jc      sr
  214.         mov     ah,3eh
  215.         int     21h
  216. sr:     ret
  217. read    endp
  218.  
  219.  
  220. last    label   byte
  221. code    ends
  222.         end     prog
  223.  
  224.